This is Kara’s attempt to think about patterns of prevalence across sites: What proportion of participants in each site endorsed each question, and can we find “clusters” of questions that were either similar in prevalence across sites or difference across sites in various ways?

This is inspired by Ann’s ideas on 2018-10-08, but uses a somewhat different strategy.

Notes: per our conversation with Nikki, we are dropping one question (#53), which was a repeated question in all sites except for China.

Make new dataset

First, I’m going to make a new dataset where, for each question, we have the proportion of yes reponses from each of the five field sites.

Joining, by = "taves_subj"
Joining, by = "question"
Setting row names on a tibble is deprecated.

Here’s a sample of what this new dataset looks like (5 of the 59 columns):

Site 10. I have distinct memories of having lived a different life, in a different time and place. 11. I have perceived or interacted with what seemed to be a world or reality other than the one I usually inhabit. 12. I have had the experience of being aware that I was dreaming while asleep. 13. I have sensed the presence of what seemed to be non-ordinary forces or entities. 14. I have had an experience in which the meaning and purpose of my life suddenly became clear to me.
US 0.0961538 0.0776699 0.6310680 0.2549020 0.2788462
Ghana 0.4409449 0.3360000 0.6220472 0.3840000 0.4765625
Thailand 0.0952381 0.0769231 0.8190476 0.2380952 0.4761905
China 0.1279070 0.2808989 0.8395062 0.2159091 0.5308642
Vanuatu 0.6000000 0.3789474 0.7608696 0.3541667 0.8210526

Hierarchical clustering

My first instinct was to try hierarchical clustering on this new dataset. Each question is associated with 5 prevalences (one for each of our 5 fieldsites). In this cluster analysis, we’re looking for questions that share similar patterns of prevalence across the fieldsites - e.g., one cluster might identify a set questions where the prevalence is roughly the same across the 5 sites; another cluster might identify a set of questions where the prevalence is high in Ghana and Vanuatu but low everywhere else; etc. I think this captures some of the spirit of what Ann was after today (10/8)… though maybe not everything (e.g., it might not differentiate between questions where prevalence is high across the 5 sites vs. questions where prevalence is low across the 5 sites).

After some playing around with this, I’m going to extract 9 clusters here - I’ve colored them according such above. This is a subjective call - you could extract more or fewer. I think this seems kind of reasonable eyeballing the plot above.

Joining, by = "question_text"
Joining, by = "question"

Cluster 1

Here I’ll plot the prevalence of endorsements in each site for each of the questions in Cluster 1. (Note that the order of clusters doesn’t align with the top to bottom order of the previous plot - sorry if that’s confusing, it’s just an artifact of how the previous plot worked. Not very meaningful. This is the light orange cluster above.)

I’ll plot these questions in descending order of their prevalence in the US sample, just as a point of reference.

It looks like the prevalence pattern here is low in the US and Thailand (~25%), slightly higher in China (but under 50%), and higher in Ghana and Vanuatu (generally over 50%).

I won’t try to interpret the meaning of these questions right now.

Cluster 2

Now I’ll plot the prevalence of endorsements in each site for each of the questions in Cluster 2 (the pink cluster in the overall plot).

Again, I’ll plot these questions in descending order of their prevalence in the US sample, just as a point of reference.

It looks like the prevalence pattern here is something like very low in the US (generally < 10%), pretty low in Thailand and China (generally < 25%), middling in Ghana (around 25%), and moderate in Vanuatu (under 50%). But there are some exceptions here - e.g., #26 (where Thailand is highest); #47 and #39 (where all sites are comparable); #51 (where Ghana, Thailand, and China are all comparable). I would say that these questions are less good examples of this “cluster.”

Cluster 3

Now I’ll plot the prevalence of endorsements in each site for each of the questions in Cluster 3 (the dark red cluster in the overall plot).

Again, I’ll plot these questions in descending order of their prevalence in the US sample, just as a point of reference.

It looks like the prevalence pattern here is generally low (~25%) across the board, but slightly higher in Ghana and Vanuatu (closer to 40%).

Cluster 4

Now I’ll plot the prevalence of endorsements in each site for each of the questions in Cluster 4 (the light blue cluster in the overall plot).

Again, I’ll plot these questions in descending order of their prevalence in the US sample, just as a point of reference.

It looks like the prevalence pattern here is generally comparable and pretty high (~75%) across the board, especially in China and Thailand.

Cluster 5

Now I’ll plot the prevalence of endorsements in each site for each of the questions in Cluster 5 (the dark orange cluster in the overall plot).

Again, I’ll plot these questions in descending order of their prevalence in the US sample, just as a point of reference.

It looks like the prevalence pattern here is generally comparable and moderate (~25%) across the board, but higher in Ghana and Vanuatu (closer to 50%).

Cluster 6

Now I’ll plot the prevalence of endorsements in each site for each of the questions in Cluster 6 (the dark green cluster in the overall plot).

Again, I’ll plot these questions in descending order of their prevalence in the US sample, just as a point of reference.

It looks like the prevalence pattern here is generally comparable and moderate (~25%) in the US and Thailand, but higher in Ghana, China, and especially Vanuatu (>50%).

Cluster 7

Now I’ll plot the prevalence of endorsements in each site for each of the questions in Cluster 7 (the dark blue cluster in the overall plot).

Again, I’ll plot these questions in descending order of their prevalence in the US sample, just as a point of reference.

It looks like the prevalence pattern here is generally moderate (~25%) in the US and Thailand, higher in Ghana and Vanuatu (~50%), and especially high in China (~60%).

Cluster 8

Now I’ll plot the prevalence of endorsements in each site for each of the questions in Cluster 8 (the light purple cluster in the overall plot).

Again, I’ll plot these questions in descending order of their prevalence in the US sample, just as a point of reference.

It looks like the prevalence pattern here is generally moderate (~25%) across the board, maybe a little higher in China and Vanuatu (closer to 40%).

Cluster 9

Now I’ll plot the prevalence of endorsements in each site for each of the questions in Cluster 9 (the light green cluster in the overall plot).

Again, I’ll plot these questions in descending order of their prevalence in the US sample, just as a point of reference.

It looks like the prevalence pattern here is generally high (~50%) across the board, and espcially in China (closer to 70%).

LS0tCnRpdGxlOiAiS1cgbG9va2luZyBhdCBwYXR0ZXJucyBvZiBwcmV2YWxlbmNlIgpkYXRlOiAyMDE4LTEwLTA4Cm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KClRoaXMgaXMgS2FyYSdzIGF0dGVtcHQgdG8gdGhpbmsgYWJvdXQgcGF0dGVybnMgb2YgcHJldmFsZW5jZSBhY3Jvc3Mgc2l0ZXM6IFdoYXQgcHJvcG9ydGlvbiBvZiBwYXJ0aWNpcGFudHMgaW4gZWFjaCBzaXRlIGVuZG9yc2VkIGVhY2ggcXVlc3Rpb24sIGFuZCBjYW4gd2UgZmluZCAiY2x1c3RlcnMiIG9mIHF1ZXN0aW9ucyB0aGF0IHdlcmUgZWl0aGVyIHNpbWlsYXIgaW4gcHJldmFsZW5jZSBhY3Jvc3Mgc2l0ZXMgb3IgZGlmZmVyZW5jZSBhY3Jvc3Mgc2l0ZXMgaW4gdmFyaW91cyB3YXlzPwoKVGhpcyBpcyBpbnNwaXJlZCBieSBBbm4ncyBpZGVhcyBvbiAyMDE4LTEwLTA4LCBidXQgdXNlcyBhIHNvbWV3aGF0IGRpZmZlcmVudCBzdHJhdGVneS4KCmBgYHtyIGdsb2JhbF9vcHRpb25zLCBpbmNsdWRlID0gRn0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG89Riwgd2FybmluZz1GLCBjYWNoZT1GLCBtZXNzYWdlPUYpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBGfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShyZWFkeGwpCmxpYnJhcnkocHN5Y2gpCmxpYnJhcnkoZmFjdG9leHRyYSkKbGlicmFyeShnZ2RlbmRybykKbGlicmFyeShkZW5kZXh0ZW5kKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gRn0KZDAgPC0gcmVhZF9leGNlbCgiL1VzZXJzL2t3ZWlzbWFuL0RvY3VtZW50cy9SZXNlYXJjaCAoU3RhbmZvcmQpL1Byb2plY3RzL1RlbXBsZXRvbiBHcmFudC9EQVRBIFdSQU5HTElORy9UYXZlcy9kYXRhL1RhdmVzX2Z1bGxfZGF0YXNldC54bHN4Iiwgc2hlZXQgPSA1KVstMSxdICMgcmVtb3ZlIHF1ZXN0aW9uIHRleHQKCnF1ZXN0aW9uX2tleSA8LSByZWFkX2V4Y2VsKCIvVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvVGVtcGxldG9uIEdyYW50L0RBVEEgV1JBTkdMSU5HL1RhdmVzL2RhdGEvVGF2ZXNfZnVsbF9kYXRhc2V0Lnhsc3giLCBzaGVldCA9IDMpWywxOjVdICMgb25seSByZWxldmFudCBjb2x1bW5zCgpuX2l0ZXIgPC0gNTAwMApgYGAKCmBgYHtyLCBpbmNsdWRlID0gRn0KZF9iYXNlIDwtIGQwICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICBzZWxlY3QodGF2ZXNfc3ViaiwgdGF2ZXNfMDE6dGF2ZXNfNjBlKSAlPiUKICBzZWxlY3QoLWVuZHNfd2l0aCgiYSIpLCAtZW5kc193aXRoKCJiIiksIC1lbmRzX3dpdGgoImMiKSwgCiAgICAgICAgIC1lbmRzX3dpdGgoImQiKSwgLWVuZHNfd2l0aCgiZSIpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGZpbHRlcih0YXZlc19zdWJqICE9ICI0MDU0OCIpICU+JSAjIHJlbW92ZSBvbmUgZHVwbGljYXRlCiAgIyBjb2x1bW5fdG9fcm93bmFtZXMoInRhdmVzX3N1YmoiKSAlPiUKICBtdXRhdGVfYXQodmFycygtdGF2ZXNfc3ViaiksCiAgICAgICAgICAgIGZ1bnMoZmFjdG9yKHRvbG93ZXIoLiksIGxldmVscyA9IGMoIm5vIiwgInllcyIpKSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKC10YXZlc19zdWJqKSwKICAgICAgICAgICAgZnVucyhudW0gPSBhcy5udW1lcmljKC4pIC0gMSkpICU+JQogIGNvbHVtbl90b19yb3duYW1lcygidGF2ZXNfc3ViaiIpICU+JQogIHNlbGVjdCgtc3RhcnRzX3dpdGgoInRhdmVzXzUzIikpCgpkX2Jhc2VfbnVtIDwtIGRfYmFzZSAlPiUKICBzZWxlY3QoZW5kc193aXRoKCJfbnVtIikpCmBgYAoKTm90ZXM6IHBlciBvdXIgY29udmVyc2F0aW9uIHdpdGggTmlra2ksIHdlIGFyZSBkcm9wcGluZyBvbmUgcXVlc3Rpb24gKCM1MyksIHdoaWNoIHdhcyBhIHJlcGVhdGVkIHF1ZXN0aW9uIGluIGFsbCBzaXRlcyBleGNlcHQgZm9yIENoaW5hLgoKCiMgTWFrZSBuZXcgZGF0YXNldAoKRmlyc3QsIEknbSBnb2luZyB0byBtYWtlIGEgbmV3IGRhdGFzZXQgd2hlcmUsIGZvciBlYWNoIHF1ZXN0aW9uLCB3ZSBoYXZlIHRoZSBwcm9wb3J0aW9uIG9mIHllcyByZXBvbnNlcyBmcm9tIGVhY2ggb2YgdGhlIGZpdmUgZmllbGQgc2l0ZXMuCgpgYGB7cn0KZF9wcmV2IDwtIGRfYmFzZV9udW0gJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJ0YXZlc19zdWJqIikgJT4lCiAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLXRhdmVzX3N1YmopICU+JQogIGxlZnRfam9pbihkMCAlPiUgZGlzdGluY3QodGF2ZXNfc3ViaiwgdGF2ZXNfY3RyeSkpICU+JQogIGdyb3VwX2J5KHRhdmVzX2N0cnksIHF1ZXN0aW9uKSAlPiUKICBzdW1tYXJpc2UocHJldiA9IG1lYW4ocmVzcG9uc2UsIG5hLnJtID0gVCkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGUocXVlc3Rpb24gPSBnc3ViKCJfbnVtIiwgIiIsIHF1ZXN0aW9uKSkgJT4lCiAgbGVmdF9qb2luKHF1ZXN0aW9uX2tleSAlPiUKICAgICAgICAgICAgICByZW5hbWUocXVlc3Rpb24gPSBgVmFyaWFibGUgTmFtZSAtIFZFUlNJT04gMSAtLSBhbGwgdmFyaWFibGVzIGluIHZlcnNpb24yIGhhdmUgYmVlbiByZW5hbWVkIHRvIHJlZmxlY3QgdGhlc2UgdmFyYWlibGUgbmFtZXNgLAogICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbl90ZXh0ID0gYFF1ZXN0aW9uIC0gVkVSU0lPTiAxYCkpICU+JQogIHNlbGVjdCh0YXZlc19jdHJ5LCBxdWVzdGlvbiwgcXVlc3Rpb25fdGV4dCwgcHJldikgJT4lCiAgbXV0YXRlKHF1ZXN0aW9uX3RleHQgPSBnc3ViKCJcciIsICIgIiwgcXVlc3Rpb25fdGV4dCksCiAgICAgICAgIHF1ZXN0aW9uX3RleHQgPSBnc3ViKCJcbiIsICIgIiwgcXVlc3Rpb25fdGV4dCksCiAgICAgICAgIHF1ZXN0aW9uX3RleHQgPSBnc3ViKCIgICIsICIgIiwgcXVlc3Rpb25fdGV4dCksCiAgICAgICAgIHF1ZXN0aW9uX3RleHQgPSBnc3ViKCLigJrDhMO0IiwgIiciLCBxdWVzdGlvbl90ZXh0KSwKICAgICAgICAgcXVlc3Rpb25fdGV4dCA9IGdzdWIoIuKAmsOEw7oiLCAiJyIsIHF1ZXN0aW9uX3RleHQpLAogICAgICAgICBxdWVzdGlvbl90ZXh0ID0gZ3N1Yigi4oCaw4TDuSIsICInIiwgcXVlc3Rpb25fdGV4dCksCiAgICAgICAgIHRhdmVzX2N0cnkgPSBmYWN0b3IodGF2ZXNfY3RyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJVUyIsICJHaGFuYSIsICJUaGFpbGFuZCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNoaW5hIiwgIlZhbnVhdHUiKSkpCgoKZF9wcmV2X3dpZGUgPC0gZF9wcmV2ICU+JQogIG11dGF0ZShxdWVzdGlvbiA9IGZhY3RvcihxdWVzdGlvbikpICU+JQogIGFycmFuZ2UocXVlc3Rpb24pICU+JQogIHNlbGVjdCgtcXVlc3Rpb24pICU+JQogIHNwcmVhZChxdWVzdGlvbl90ZXh0LCBwcmV2KSAlPiUKICBtdXRhdGUodGF2ZXNfY3RyeSA9IGFzLmNoYXJhY3Rlcih0YXZlc19jdHJ5KSkgJT4lCiAgY29sdW1uX3RvX3Jvd25hbWVzKCJ0YXZlc19jdHJ5IikKYGBgCgpIZXJlJ3MgYSBzYW1wbGUgb2Ygd2hhdCB0aGlzIG5ldyBkYXRhc2V0IGxvb2tzIGxpa2UgKDUgb2YgdGhlIDU5IGNvbHVtbnMpOgoKYGBge3IsIHJlc3VsdHMgPSAiYXNpcyJ9CmRfcHJldl93aWRlICU+JSAKICBzZWxlY3QoMjo2KSAlPiUgCiAgcm93bmFtZXNfdG9fY29sdW1uKCJTaXRlIikgJT4lIAogIGtuaXRyOjprYWJsZSgpICU+JSAKICBrYWJsZUV4dHJhOjprYWJsZV9zdHlsaW5nKCkKYGBgCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIEhpZXJhcmNoaWNhbCBjbHVzdGVyaW5nCgpNeSBmaXJzdCBpbnN0aW5jdCB3YXMgdG8gdHJ5IGhpZXJhcmNoaWNhbCBjbHVzdGVyaW5nIG9uIHRoaXMgbmV3IGRhdGFzZXQuIEVhY2ggcXVlc3Rpb24gaXMgYXNzb2NpYXRlZCB3aXRoIDUgcHJldmFsZW5jZXMgKG9uZSBmb3IgZWFjaCBvZiBvdXIgNSBmaWVsZHNpdGVzKS4gSW4gdGhpcyBjbHVzdGVyIGFuYWx5c2lzLCB3ZSdyZSBsb29raW5nIGZvciBxdWVzdGlvbnMgdGhhdCBzaGFyZSBzaW1pbGFyIHBhdHRlcm5zIG9mIHByZXZhbGVuY2UgYWNyb3NzIHRoZSBmaWVsZHNpdGVzIC0gZS5nLiwgb25lIGNsdXN0ZXIgbWlnaHQgaWRlbnRpZnkgYSBzZXQgcXVlc3Rpb25zIHdoZXJlIHRoZSBwcmV2YWxlbmNlIGlzIHJvdWdobHkgdGhlIHNhbWUgYWNyb3NzIHRoZSA1IHNpdGVzOyBhbm90aGVyIGNsdXN0ZXIgbWlnaHQgaWRlbnRpZnkgYSBzZXQgb2YgcXVlc3Rpb25zIHdoZXJlIHRoZSBwcmV2YWxlbmNlIGlzIGhpZ2ggaW4gR2hhbmEgYW5kIFZhbnVhdHUgYnV0IGxvdyBldmVyeXdoZXJlIGVsc2U7IGV0Yy4gSSB0aGluayB0aGlzIGNhcHR1cmVzIHNvbWUgb2YgdGhlIHNwaXJpdCBvZiB3aGF0IEFubiB3YXMgYWZ0ZXIgdG9kYXkgKDEwLzgpLi4uIHRob3VnaCBtYXliZSBub3QgZXZlcnl0aGluZyAoZS5nLiwgaXQgbWlnaHQgbm90IGRpZmZlcmVudGlhdGUgYmV0d2VlbiBxdWVzdGlvbnMgd2hlcmUgcHJldmFsZW5jZSBpcyBoaWdoIGFjcm9zcyB0aGUgNSBzaXRlcyB2cy4gcXVlc3Rpb25zIHdoZXJlIHByZXZhbGVuY2UgaXMgbG93IGFjcm9zcyB0aGUgNSBzaXRlcykuCgpgYGB7cn0KaGNsdXN0X3ByZXYgPC0gZF9wcmV2X3dpZGUgJT4lIAogIHQoKSAlPiUgCiAgZGlzdCgpICU+JSAKICBoY2x1c3QoKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA4LCBmaWcuYXNwID0gMX0KaGNsdXN0X3ByZXYgJT4lIAogIGFzLmRlbmRyb2dyYW0oKSAlPiUgCiAgc2V0KCJsYWJlbHNfY29sIiwgayA9IDksIHZhbHVlID0gYygiI2E2Y2VlMyIsICIjMWY3OGI0IiwgIiNiMmRmOGEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiMzM2EwMmMiLCAiI2ZiOWE5OSIsICIjZTMxYTFjIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI2ZkYmY2ZiIsICIjZmY3ZjAwIiwgIiNjYWIyZDYiKSkgJT4lIAogIHBsb3QoaG9yaXogPSBULCB4bGltID0gYygxLjUsIC0xMiksIGF4ZXMgPSBGKQpgYGAKCkFmdGVyIHNvbWUgcGxheWluZyBhcm91bmQgd2l0aCB0aGlzLCBJJ20gZ29pbmcgdG8gZXh0cmFjdCA5IGNsdXN0ZXJzIGhlcmUgLSBJJ3ZlIGNvbG9yZWQgdGhlbSBhY2NvcmRpbmcgc3VjaCBhYm92ZS4gVGhpcyBpcyBhIHN1YmplY3RpdmUgY2FsbCAtIHlvdSBjb3VsZCBleHRyYWN0IG1vcmUgb3IgZmV3ZXIuIEkgdGhpbmsgdGhpcyBzZWVtcyBraW5kIG9mIHJlYXNvbmFibGUgZXllYmFsbGluZyB0aGUgcGxvdCBhYm92ZS4KCmBgYHtyfQpoY2x1c3RfZGYgPC0gZGF0YS5mcmFtZShjbHVzdGVyID0gY3V0cmVlKGhjbHVzdF9wcmV2LCA5KSkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJxdWVzdGlvbl90ZXh0IikgJT4lCiAgZnVsbF9qb2luKGRfcHJldikgJT4lCiAgbGVmdF9qb2luKGRfcHJldiAlPiUgCiAgICAgICAgICAgICAgZmlsdGVyKHRhdmVzX2N0cnkgPT0gIlVTIikgJT4lIAogICAgICAgICAgICAgIGRpc3RpbmN0KHF1ZXN0aW9uLCBwcmV2KSAlPiUgCiAgICAgICAgICAgICAgcmVuYW1lKCJVU19wcmV2IiA9ICJwcmV2IikpICU+JQogIGFycmFuZ2UoY2x1c3RlciwgZGVzYyhVU19wcmV2KSwgdGF2ZXNfY3RyeSkKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIENsdXN0ZXIgMQoKSGVyZSBJJ2xsIHBsb3QgdGhlIHByZXZhbGVuY2Ugb2YgZW5kb3JzZW1lbnRzIGluIGVhY2ggc2l0ZSBmb3IgZWFjaCBvZiB0aGUgcXVlc3Rpb25zIGluIENsdXN0ZXIgMS4gKE5vdGUgdGhhdCB0aGUgb3JkZXIgb2YgY2x1c3RlcnMgZG9lc24ndCBhbGlnbiB3aXRoIHRoZSB0b3AgdG8gYm90dG9tIG9yZGVyIG9mIHRoZSBwcmV2aW91cyBwbG90IC0gc29ycnkgaWYgdGhhdCdzIGNvbmZ1c2luZywgaXQncyBqdXN0IGFuIGFydGlmYWN0IG9mIGhvdyB0aGUgcHJldmlvdXMgcGxvdCB3b3JrZWQuIE5vdCB2ZXJ5IG1lYW5pbmdmdWwuIFRoaXMgaXMgdGhlIGxpZ2h0IG9yYW5nZSBjbHVzdGVyIGFib3ZlLikKCkknbGwgcGxvdCB0aGVzZSBxdWVzdGlvbnMgaW4gZGVzY2VuZGluZyBvcmRlciBvZiB0aGVpciBwcmV2YWxlbmNlIGluIHRoZSBVUyBzYW1wbGUsIGp1c3QgYXMgYSBwb2ludCBvZiByZWZlcmVuY2UuCgpgYGB7ciwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDF9CmhjbHVzdF9kZiAlPiUKICBmaWx0ZXIoY2x1c3RlciA9PSAxKSAlPiUKICBtdXRhdGUocXVlc3Rpb25fdGV4dCA9IGdzdWIoJyguezEsNDB9KShcXHN8JCknLCAnXFwxXG4nLCBxdWVzdGlvbl90ZXh0KSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcmVvcmRlcihxdWVzdGlvbl90ZXh0LCBVU19wcmV2KSwgeSA9IHByZXYsCiAgICAgICAgICAgICBmaWxsID0gdGF2ZXNfY3RyeSwgY29sb3IgPSB0YXZlc19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofiB0YXZlc19jdHJ5LCBzY2FsZXMgPSAiZnJlZSIpICsKICAjIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAuNSwgbHR5ID0gMikgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9ICJpZGVudGl0eSIsIHNpemUgPSAxLCBhbHBoYSA9IDAuNSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxKSwgYnJlYWtzID0gc2VxKDAsIDEsIDAuNSkpICsKICBsYWJzKHRpdGxlID0gIkNsdXN0ZXI6IDEiLAogICAgICAgeCA9ICIiLCB5ID0gInByb3BvcnRpb24gc2F5aW5nIFlFUyIpICsKICB0aGVtZV9idygpICsKICBjb29yZF9mbGlwKCkKYGBgCgpJdCBsb29rcyBsaWtlIHRoZSBwcmV2YWxlbmNlIHBhdHRlcm4gaGVyZSBpcyBsb3cgaW4gdGhlIFVTIGFuZCBUaGFpbGFuZCAofjI1JSksIHNsaWdodGx5IGhpZ2hlciBpbiBDaGluYSAoYnV0IHVuZGVyIDUwJSksIGFuZCBoaWdoZXIgaW4gR2hhbmEgYW5kIFZhbnVhdHUgKGdlbmVyYWxseSBvdmVyIDUwJSkuCgpJIHdvbid0IHRyeSB0byBpbnRlcnByZXQgdGhlIG1lYW5pbmcgb2YgdGhlc2UgcXVlc3Rpb25zIHJpZ2h0IG5vdy4KCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIENsdXN0ZXIgMgoKTm93IEknbGwgcGxvdCB0aGUgcHJldmFsZW5jZSBvZiBlbmRvcnNlbWVudHMgaW4gZWFjaCBzaXRlIGZvciBlYWNoIG9mIHRoZSBxdWVzdGlvbnMgaW4gQ2x1c3RlciAyICh0aGUgcGluayBjbHVzdGVyIGluIHRoZSBvdmVyYWxsIHBsb3QpLgoKQWdhaW4sIEknbGwgcGxvdCB0aGVzZSBxdWVzdGlvbnMgaW4gZGVzY2VuZGluZyBvcmRlciBvZiB0aGVpciBwcmV2YWxlbmNlIGluIHRoZSBVUyBzYW1wbGUsIGp1c3QgYXMgYSBwb2ludCBvZiByZWZlcmVuY2UuCgpgYGB7ciwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDAuNX0KaGNsdXN0X2RmICU+JQogIGZpbHRlcihjbHVzdGVyID09IDIpICU+JQogIG11dGF0ZShxdWVzdGlvbl90ZXh0ID0gZ3N1YignKC57MSw0MH0pKFxcc3wkKScsICdcXDFcbicsIHF1ZXN0aW9uX3RleHQpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSByZW9yZGVyKHF1ZXN0aW9uX3RleHQsIFVTX3ByZXYpLCB5ID0gcHJldiwKICAgICAgICAgICAgIGZpbGwgPSB0YXZlc19jdHJ5LCBjb2xvciA9IHRhdmVzX2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+IHRhdmVzX2N0cnksIHNjYWxlcyA9ICJmcmVlIikgKwogICMgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMC41LCBsdHkgPSAyKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gImlkZW50aXR5Iiwgc2l6ZSA9IDEsIGFscGhhID0gMC41KSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDEpLCBicmVha3MgPSBzZXEoMCwgMSwgMC41KSkgKwogIGxhYnModGl0bGUgPSAiQ2x1c3RlcjogMiIsCiAgICAgICB4ID0gIiIsIHkgPSAicHJvcG9ydGlvbiBzYXlpbmcgWUVTIikgKwogIHRoZW1lX2J3KCkgKwogIGNvb3JkX2ZsaXAoKQpgYGAKCkl0IGxvb2tzIGxpa2UgdGhlIHByZXZhbGVuY2UgcGF0dGVybiBoZXJlIGlzIHNvbWV0aGluZyBsaWtlIHZlcnkgbG93IGluIHRoZSBVUyAoZ2VuZXJhbGx5IDwgMTAlKSwgcHJldHR5IGxvdyBpbiBUaGFpbGFuZCBhbmQgQ2hpbmEgKGdlbmVyYWxseSA8IDI1JSksIG1pZGRsaW5nIGluIEdoYW5hIChhcm91bmQgMjUlKSwgYW5kIG1vZGVyYXRlIGluIFZhbnVhdHUgKHVuZGVyIDUwJSkuIEJ1dCB0aGVyZSBhcmUgc29tZSBleGNlcHRpb25zIGhlcmUgLSBlLmcuLCAjMjYgKHdoZXJlIFRoYWlsYW5kIGlzIGhpZ2hlc3QpOyAjNDcgYW5kICMzOSAod2hlcmUgYWxsIHNpdGVzIGFyZSBjb21wYXJhYmxlKTsgIzUxICh3aGVyZSBHaGFuYSwgVGhhaWxhbmQsIGFuZCBDaGluYSBhcmUgYWxsIGNvbXBhcmFibGUpLiBJIHdvdWxkIHNheSB0aGF0IHRoZXNlIHF1ZXN0aW9ucyBhcmUgbGVzcyBnb29kIGV4YW1wbGVzIG9mIHRoaXMgImNsdXN0ZXIuIgoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgQ2x1c3RlciAzCgpOb3cgSSdsbCBwbG90IHRoZSBwcmV2YWxlbmNlIG9mIGVuZG9yc2VtZW50cyBpbiBlYWNoIHNpdGUgZm9yIGVhY2ggb2YgdGhlIHF1ZXN0aW9ucyBpbiBDbHVzdGVyIDMgKHRoZSBkYXJrIHJlZCBjbHVzdGVyIGluIHRoZSBvdmVyYWxsIHBsb3QpLgoKQWdhaW4sIEknbGwgcGxvdCB0aGVzZSBxdWVzdGlvbnMgaW4gZGVzY2VuZGluZyBvcmRlciBvZiB0aGVpciBwcmV2YWxlbmNlIGluIHRoZSBVUyBzYW1wbGUsIGp1c3QgYXMgYSBwb2ludCBvZiByZWZlcmVuY2UuCgpgYGB7ciwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDAuN30KaGNsdXN0X2RmICU+JQogIGZpbHRlcihjbHVzdGVyID09IDMpICU+JQogIG11dGF0ZShxdWVzdGlvbl90ZXh0ID0gZ3N1YignKC57MSw0MH0pKFxcc3wkKScsICdcXDFcbicsIHF1ZXN0aW9uX3RleHQpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSByZW9yZGVyKHF1ZXN0aW9uX3RleHQsIFVTX3ByZXYpLCB5ID0gcHJldiwKICAgICAgICAgICAgIGZpbGwgPSB0YXZlc19jdHJ5LCBjb2xvciA9IHRhdmVzX2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+IHRhdmVzX2N0cnksIHNjYWxlcyA9ICJmcmVlIikgKwogICMgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMC41LCBsdHkgPSAyKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gImlkZW50aXR5Iiwgc2l6ZSA9IDEsIGFscGhhID0gMC41KSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDEpLCBicmVha3MgPSBzZXEoMCwgMSwgMC41KSkgKwogIGxhYnModGl0bGUgPSAiQ2x1c3RlcjogMyIsCiAgICAgICB4ID0gIiIsIHkgPSAicHJvcG9ydGlvbiBzYXlpbmcgWUVTIikgKwogIHRoZW1lX2J3KCkgKwogIGNvb3JkX2ZsaXAoKQpgYGAKCkl0IGxvb2tzIGxpa2UgdGhlIHByZXZhbGVuY2UgcGF0dGVybiBoZXJlIGlzIGdlbmVyYWxseSBsb3cgKH4yNSUpIGFjcm9zcyB0aGUgYm9hcmQsIGJ1dCBzbGlnaHRseSBoaWdoZXIgaW4gR2hhbmEgYW5kIFZhbnVhdHUgKGNsb3NlciB0byA0MCUpLgoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgQ2x1c3RlciA0CgpOb3cgSSdsbCBwbG90IHRoZSBwcmV2YWxlbmNlIG9mIGVuZG9yc2VtZW50cyBpbiBlYWNoIHNpdGUgZm9yIGVhY2ggb2YgdGhlIHF1ZXN0aW9ucyBpbiBDbHVzdGVyIDQgKHRoZSBsaWdodCBibHVlIGNsdXN0ZXIgaW4gdGhlIG92ZXJhbGwgcGxvdCkuCgpBZ2FpbiwgSSdsbCBwbG90IHRoZXNlIHF1ZXN0aW9ucyBpbiBkZXNjZW5kaW5nIG9yZGVyIG9mIHRoZWlyIHByZXZhbGVuY2UgaW4gdGhlIFVTIHNhbXBsZSwganVzdCBhcyBhIHBvaW50IG9mIHJlZmVyZW5jZS4KCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMC4zfQpoY2x1c3RfZGYgJT4lCiAgZmlsdGVyKGNsdXN0ZXIgPT0gNCkgJT4lCiAgbXV0YXRlKHF1ZXN0aW9uX3RleHQgPSBnc3ViKCcoLnsxLDQwfSkoXFxzfCQpJywgJ1xcMVxuJywgcXVlc3Rpb25fdGV4dCkpICU+JQogIGdncGxvdChhZXMoeCA9IHJlb3JkZXIocXVlc3Rpb25fdGV4dCwgVVNfcHJldiksIHkgPSBwcmV2LAogICAgICAgICAgICAgZmlsbCA9IHRhdmVzX2N0cnksIGNvbG9yID0gdGF2ZXNfY3RyeSkpICsKICBmYWNldF9ncmlkKH4gdGF2ZXNfY3RyeSwgc2NhbGVzID0gImZyZWUiKSArCiAgIyBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLjUsIGx0eSA9IDIpICsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAiaWRlbnRpdHkiLCBzaXplID0gMSwgYWxwaGEgPSAwLjUpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMSksIGJyZWFrcyA9IHNlcSgwLCAxLCAwLjUpKSArCiAgbGFicyh0aXRsZSA9ICJDbHVzdGVyOiA0IiwKICAgICAgIHggPSAiIiwgeSA9ICJwcm9wb3J0aW9uIHNheWluZyBZRVMiKSArCiAgdGhlbWVfYncoKSArCiAgY29vcmRfZmxpcCgpCmBgYAoKSXQgbG9va3MgbGlrZSB0aGUgcHJldmFsZW5jZSBwYXR0ZXJuIGhlcmUgaXMgZ2VuZXJhbGx5IGNvbXBhcmFibGUgYW5kIHByZXR0eSBoaWdoICh+NzUlKSBhY3Jvc3MgdGhlIGJvYXJkLCBlc3BlY2lhbGx5IGluIENoaW5hIGFuZCBUaGFpbGFuZC4KCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIENsdXN0ZXIgNQoKTm93IEknbGwgcGxvdCB0aGUgcHJldmFsZW5jZSBvZiBlbmRvcnNlbWVudHMgaW4gZWFjaCBzaXRlIGZvciBlYWNoIG9mIHRoZSBxdWVzdGlvbnMgaW4gQ2x1c3RlciA1ICh0aGUgZGFyayBvcmFuZ2UgY2x1c3RlciBpbiB0aGUgb3ZlcmFsbCBwbG90KS4KCkFnYWluLCBJJ2xsIHBsb3QgdGhlc2UgcXVlc3Rpb25zIGluIGRlc2NlbmRpbmcgb3JkZXIgb2YgdGhlaXIgcHJldmFsZW5jZSBpbiB0aGUgVVMgc2FtcGxlLCBqdXN0IGFzIGEgcG9pbnQgb2YgcmVmZXJlbmNlLgoKYGBge3IsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAwLjZ9CmhjbHVzdF9kZiAlPiUKICBmaWx0ZXIoY2x1c3RlciA9PSA1KSAlPiUKICBtdXRhdGUocXVlc3Rpb25fdGV4dCA9IGdzdWIoJyguezEsNDB9KShcXHN8JCknLCAnXFwxXG4nLCBxdWVzdGlvbl90ZXh0KSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcmVvcmRlcihxdWVzdGlvbl90ZXh0LCBVU19wcmV2KSwgeSA9IHByZXYsCiAgICAgICAgICAgICBmaWxsID0gdGF2ZXNfY3RyeSwgY29sb3IgPSB0YXZlc19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofiB0YXZlc19jdHJ5LCBzY2FsZXMgPSAiZnJlZSIpICsKICAjIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAuNSwgbHR5ID0gMikgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9ICJpZGVudGl0eSIsIHNpemUgPSAxLCBhbHBoYSA9IDAuNSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxKSwgYnJlYWtzID0gc2VxKDAsIDEsIDAuNSkpICsKICBsYWJzKHRpdGxlID0gIkNsdXN0ZXI6IDUiLAogICAgICAgeCA9ICIiLCB5ID0gInByb3BvcnRpb24gc2F5aW5nIFlFUyIpICsKICB0aGVtZV9idygpICsKICBjb29yZF9mbGlwKCkKYGBgCgpJdCBsb29rcyBsaWtlIHRoZSBwcmV2YWxlbmNlIHBhdHRlcm4gaGVyZSBpcyBnZW5lcmFsbHkgY29tcGFyYWJsZSBhbmQgbW9kZXJhdGUgKH4yNSUpIGFjcm9zcyB0aGUgYm9hcmQsIGJ1dCBoaWdoZXIgaW4gR2hhbmEgYW5kIFZhbnVhdHUgKGNsb3NlciB0byA1MCUpLgoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgQ2x1c3RlciA2CgpOb3cgSSdsbCBwbG90IHRoZSBwcmV2YWxlbmNlIG9mIGVuZG9yc2VtZW50cyBpbiBlYWNoIHNpdGUgZm9yIGVhY2ggb2YgdGhlIHF1ZXN0aW9ucyBpbiBDbHVzdGVyIDYgKHRoZSBkYXJrIGdyZWVuIGNsdXN0ZXIgaW4gdGhlIG92ZXJhbGwgcGxvdCkuCgpBZ2FpbiwgSSdsbCBwbG90IHRoZXNlIHF1ZXN0aW9ucyBpbiBkZXNjZW5kaW5nIG9yZGVyIG9mIHRoZWlyIHByZXZhbGVuY2UgaW4gdGhlIFVTIHNhbXBsZSwganVzdCBhcyBhIHBvaW50IG9mIHJlZmVyZW5jZS4KCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMC4zfQpoY2x1c3RfZGYgJT4lCiAgZmlsdGVyKGNsdXN0ZXIgPT0gNikgJT4lCiAgbXV0YXRlKHF1ZXN0aW9uX3RleHQgPSBnc3ViKCcoLnsxLDQwfSkoXFxzfCQpJywgJ1xcMVxuJywgcXVlc3Rpb25fdGV4dCkpICU+JQogIGdncGxvdChhZXMoeCA9IHJlb3JkZXIocXVlc3Rpb25fdGV4dCwgVVNfcHJldiksIHkgPSBwcmV2LAogICAgICAgICAgICAgZmlsbCA9IHRhdmVzX2N0cnksIGNvbG9yID0gdGF2ZXNfY3RyeSkpICsKICBmYWNldF9ncmlkKH4gdGF2ZXNfY3RyeSwgc2NhbGVzID0gImZyZWUiKSArCiAgIyBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLjUsIGx0eSA9IDIpICsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAiaWRlbnRpdHkiLCBzaXplID0gMSwgYWxwaGEgPSAwLjUpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMSksIGJyZWFrcyA9IHNlcSgwLCAxLCAwLjUpKSArCiAgbGFicyh0aXRsZSA9ICJDbHVzdGVyOiA2IiwKICAgICAgIHggPSAiIiwgeSA9ICJwcm9wb3J0aW9uIHNheWluZyBZRVMiKSArCiAgdGhlbWVfYncoKSArCiAgY29vcmRfZmxpcCgpCmBgYAoKSXQgbG9va3MgbGlrZSB0aGUgcHJldmFsZW5jZSBwYXR0ZXJuIGhlcmUgaXMgZ2VuZXJhbGx5IGNvbXBhcmFibGUgYW5kIG1vZGVyYXRlICh+MjUlKSBpbiB0aGUgVVMgYW5kIFRoYWlsYW5kLCBidXQgaGlnaGVyIGluIEdoYW5hLCBDaGluYSwgYW5kIGVzcGVjaWFsbHkgVmFudWF0dSAoPjUwJSkuCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBDbHVzdGVyIDcKCk5vdyBJJ2xsIHBsb3QgdGhlIHByZXZhbGVuY2Ugb2YgZW5kb3JzZW1lbnRzIGluIGVhY2ggc2l0ZSBmb3IgZWFjaCBvZiB0aGUgcXVlc3Rpb25zIGluIENsdXN0ZXIgNyAodGhlIGRhcmsgYmx1ZSBjbHVzdGVyIGluIHRoZSBvdmVyYWxsIHBsb3QpLgoKQWdhaW4sIEknbGwgcGxvdCB0aGVzZSBxdWVzdGlvbnMgaW4gZGVzY2VuZGluZyBvcmRlciBvZiB0aGVpciBwcmV2YWxlbmNlIGluIHRoZSBVUyBzYW1wbGUsIGp1c3QgYXMgYSBwb2ludCBvZiByZWZlcmVuY2UuCgpgYGB7ciwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDAuN30KaGNsdXN0X2RmICU+JQogIGZpbHRlcihjbHVzdGVyID09IDcpICU+JQogIG11dGF0ZShxdWVzdGlvbl90ZXh0ID0gZ3N1YignKC57MSw0MH0pKFxcc3wkKScsICdcXDFcbicsIHF1ZXN0aW9uX3RleHQpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSByZW9yZGVyKHF1ZXN0aW9uX3RleHQsIFVTX3ByZXYpLCB5ID0gcHJldiwKICAgICAgICAgICAgIGZpbGwgPSB0YXZlc19jdHJ5LCBjb2xvciA9IHRhdmVzX2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+IHRhdmVzX2N0cnksIHNjYWxlcyA9ICJmcmVlIikgKwogICMgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMC41LCBsdHkgPSAyKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gImlkZW50aXR5Iiwgc2l6ZSA9IDEsIGFscGhhID0gMC41KSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDEpLCBicmVha3MgPSBzZXEoMCwgMSwgMC41KSkgKwogIGxhYnModGl0bGUgPSAiQ2x1c3RlcjogNyIsCiAgICAgICB4ID0gIiIsIHkgPSAicHJvcG9ydGlvbiBzYXlpbmcgWUVTIikgKwogIHRoZW1lX2J3KCkgKwogIGNvb3JkX2ZsaXAoKQpgYGAKCkl0IGxvb2tzIGxpa2UgdGhlIHByZXZhbGVuY2UgcGF0dGVybiBoZXJlIGlzIGdlbmVyYWxseSBtb2RlcmF0ZSAofjI1JSkgaW4gdGhlIFVTIGFuZCBUaGFpbGFuZCwgaGlnaGVyIGluIEdoYW5hIGFuZCBWYW51YXR1ICh+NTAlKSwgYW5kIGVzcGVjaWFsbHkgaGlnaCBpbiBDaGluYSAofjYwJSkuCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBDbHVzdGVyIDgKCk5vdyBJJ2xsIHBsb3QgdGhlIHByZXZhbGVuY2Ugb2YgZW5kb3JzZW1lbnRzIGluIGVhY2ggc2l0ZSBmb3IgZWFjaCBvZiB0aGUgcXVlc3Rpb25zIGluIENsdXN0ZXIgOCAodGhlIGxpZ2h0IHB1cnBsZSBjbHVzdGVyIGluIHRoZSBvdmVyYWxsIHBsb3QpLgoKQWdhaW4sIEknbGwgcGxvdCB0aGVzZSBxdWVzdGlvbnMgaW4gZGVzY2VuZGluZyBvcmRlciBvZiB0aGVpciBwcmV2YWxlbmNlIGluIHRoZSBVUyBzYW1wbGUsIGp1c3QgYXMgYSBwb2ludCBvZiByZWZlcmVuY2UuCgpgYGB7ciwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDAuN30KaGNsdXN0X2RmICU+JQogIGZpbHRlcihjbHVzdGVyID09IDgpICU+JQogIG11dGF0ZShxdWVzdGlvbl90ZXh0ID0gZ3N1YignKC57MSw0MH0pKFxcc3wkKScsICdcXDFcbicsIHF1ZXN0aW9uX3RleHQpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSByZW9yZGVyKHF1ZXN0aW9uX3RleHQsIFVTX3ByZXYpLCB5ID0gcHJldiwKICAgICAgICAgICAgIGZpbGwgPSB0YXZlc19jdHJ5LCBjb2xvciA9IHRhdmVzX2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+IHRhdmVzX2N0cnksIHNjYWxlcyA9ICJmcmVlIikgKwogICMgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMC41LCBsdHkgPSAyKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gImlkZW50aXR5Iiwgc2l6ZSA9IDEsIGFscGhhID0gMC41KSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDEpLCBicmVha3MgPSBzZXEoMCwgMSwgMC41KSkgKwogIGxhYnModGl0bGUgPSAiQ2x1c3RlcjogOCIsCiAgICAgICB4ID0gIiIsIHkgPSAicHJvcG9ydGlvbiBzYXlpbmcgWUVTIikgKwogIHRoZW1lX2J3KCkgKwogIGNvb3JkX2ZsaXAoKQpgYGAKCkl0IGxvb2tzIGxpa2UgdGhlIHByZXZhbGVuY2UgcGF0dGVybiBoZXJlIGlzIGdlbmVyYWxseSBtb2RlcmF0ZSAofjI1JSkgYWNyb3NzIHRoZSBib2FyZCwgbWF5YmUgYSBsaXR0bGUgaGlnaGVyIGluIENoaW5hIGFuZCBWYW51YXR1IChjbG9zZXIgdG8gNDAlKS4KCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIENsdXN0ZXIgOQoKTm93IEknbGwgcGxvdCB0aGUgcHJldmFsZW5jZSBvZiBlbmRvcnNlbWVudHMgaW4gZWFjaCBzaXRlIGZvciBlYWNoIG9mIHRoZSBxdWVzdGlvbnMgaW4gQ2x1c3RlciA5ICh0aGUgbGlnaHQgZ3JlZW4gY2x1c3RlciBpbiB0aGUgb3ZlcmFsbCBwbG90KS4KCkFnYWluLCBJJ2xsIHBsb3QgdGhlc2UgcXVlc3Rpb25zIGluIGRlc2NlbmRpbmcgb3JkZXIgb2YgdGhlaXIgcHJldmFsZW5jZSBpbiB0aGUgVVMgc2FtcGxlLCBqdXN0IGFzIGEgcG9pbnQgb2YgcmVmZXJlbmNlLgoKYGBge3IsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAwLjR9CmhjbHVzdF9kZiAlPiUKICBmaWx0ZXIoY2x1c3RlciA9PSA5KSAlPiUKICBtdXRhdGUocXVlc3Rpb25fdGV4dCA9IGdzdWIoJyguezEsNDB9KShcXHN8JCknLCAnXFwxXG4nLCBxdWVzdGlvbl90ZXh0KSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcmVvcmRlcihxdWVzdGlvbl90ZXh0LCBVU19wcmV2KSwgeSA9IHByZXYsCiAgICAgICAgICAgICBmaWxsID0gdGF2ZXNfY3RyeSwgY29sb3IgPSB0YXZlc19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofiB0YXZlc19jdHJ5LCBzY2FsZXMgPSAiZnJlZSIpICsKICAjIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAuNSwgbHR5ID0gMikgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9ICJpZGVudGl0eSIsIHNpemUgPSAxLCBhbHBoYSA9IDAuNSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxKSwgYnJlYWtzID0gc2VxKDAsIDEsIDAuNSkpICsKICBsYWJzKHRpdGxlID0gIkNsdXN0ZXI6IDkiLAogICAgICAgeCA9ICIiLCB5ID0gInByb3BvcnRpb24gc2F5aW5nIFlFUyIpICsKICB0aGVtZV9idygpICsKICBjb29yZF9mbGlwKCkKYGBgCgpJdCBsb29rcyBsaWtlIHRoZSBwcmV2YWxlbmNlIHBhdHRlcm4gaGVyZSBpcyBnZW5lcmFsbHkgaGlnaCAofjUwJSkgYWNyb3NzIHRoZSBib2FyZCwgYW5kIGVzcGNpYWxseSBpbiBDaGluYSAoY2xvc2VyIHRvIDcwJSkuCg==